package com.example;

/**
 * @Author loubobooo
 * @Description #111. 二叉树的最小深度
 * @Date 2022/3/1
 */
public class MinimumDepthOfBinaryTree {

    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode() {
        }

        TreeNode(int val) {
            this.val = val;
        }

        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }

    /**
     * 方法描述:给定一个二叉树，找出其最小深度。
     * 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
     * 说明：叶子节点是指没有子节点的节点。
     * 示例 1：
     *
     * 输入：root = [3,9,20,null,null,15,7]
     * 输出：2
     * @param: [root]
     * @return: int
     * @author: loubobooo
     * @date: 2022/3/1
     */
    public int minDepth(TreeNode root) {
        if(root == null){
            return 0;
        }
        // null节点不参与比较
        if(root.left == null && root.right != null){
            return minDepth(root.right) + 1;
        }
        if(root.right == null && root.left != null){
            return minDepth(root.left) + 1;
        }
        return 1 + Math.min(minDepth(root.left), minDepth(root.right));
    }
}
